____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Byte Order Mark
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Als Byte Order Mark (BOM; deutsch: „Byte-Reihenfolge-Markierung“) wird eine charakteristische Bytefolge am Anfang eines Datenstroms bezeichnet, die das Unicode-Zeichen U+FEFF (englisch zero width no-break space) kodiert. Diese Bytefolge dient als Kennung zur Definition der Byte-Reihenfolge und Kodierungsform in UCS/Unicode-Zeichenketten, insbesondere Textdateien.
Contents
• In UTF-8
• Weiteres
• Weblinks
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
In UTF-16 und UTF-32
Bei den Kodierungen UTF-16 und UTF-32 muss die Byte-Reihenfolge angegeben werden, da hier die einzelnen Zeichen jeweils in mindestens 16 oder 32 Bit großen Werten kodiert sind und damit mehrere Bytes benötigen (UTF-16: 2 Bytes, UTF-32: 4 Bytes). Das Byte Order Mark kennzeichnet dabei, in welcher Reihenfolge die Bytes auszuwerten sind. Diese Markierung wird immer dann besonders wichtig, wenn Daten zwischen unterschiedlichen Systemen ausgetauscht werden.
In UTF-16 besteht das BOM
• in der Little-Endian-Notation umgekehrt aus FF FE.
In UTF-32 besteht das BOM
• in Big-Endian-Notation aus der Sequenz 00 00 FE FF
• in der Little-Endian-Notation aus FF FE 00 00.
Da das Zeichen U+FFFE als ungültig definiert ist, kann durch die Reihenfolge der ersten Bytes eindeutig die Auswertungs-Reihenfolge für alle folgenden Bytes festgestellt werden.
In UTF-8
Die UTF-8-Kodierung des BOM besteht aus der Bytesequenz EF BB BF, die in nicht UTF-8-fähigen Texteditoren und Browsern meist als ISO-8859-1-Zeichen  erscheinen. Bei UTF-8 stellt sich das Problem der Byte-Reihenfolge zwar nicht, doch ein BOM am String- oder Dateianfang ist erlaubt, um die Verwendung von UTF-8 als Kodierung zu kennzeichnen.
Eine sichere Unterscheidung zwischen UTF-8 und den ISO-8859-Zeichensätzen ist durch die Verwendung eines BOM zwar nicht gewährleistet, da in den 8-Bit-Zeichensätzen alle Bytesequenzen erlaubt sind, auch die UTF-8-Kodierung des BOM; wenn aber die Alternative speziell UTF-8 oder ISO 8859-1 ist, dann ist die pragmatische Annahme durchaus üblich, dass die Zeichenfolge  nicht gemeint ist, und daraus folgend, dass eine UTF-8-Kodierung vorliegt.
Weiteres
Wird ein Byte Order Mark verwendet, so kann es zu Problemen mit Programmen kommen, die ein BOM nicht erwarten oder nicht kennen:
• in Unix-artigen Umgebungen wird in Skriptdateien oft der Shebang-Mechanismus verwendet, bei dem die Zeichenfolge „#!“ ebenfalls am Dateianfang stehen muss; steht hier stattdessen ein unerwartetes BOM, so gibt es Probleme.
• in PHP mit Standardeinstellungencite-ref-3[3] führt das BOM zur Ausgabe von Zeichen an den Browser, so dass ohne „output buffering“ keine HTTP-Header mehr geändert werden können.
Tabellarische Übersicht
| Kodierung | hexadezimale Darstellung | dezimale Darstellung | Darstellung nach Windows-1252 |
|---|---|---|---|
| UTF-8 | EF BB BF [ 4 ] | 239 187 191 |  |
| UTF-16 ( BE ) | FE FF | 254 255 | þÿ |
| UTF-16 ( LE ) | FF FE | 255 254 | ÿþ |
| UTF-32 (BE) | 00 00 FE FF | 0 0 254 255 | ␀␀þÿ |
| UTF-32 (LE) | FF FE 00 00 | 255 254 0 0 | ÿþ␀␀ |
| UTF-7 | 2B 2F 76 und ein Zeichen aus: [ 38 / 39 / 2B / 2F ] [ 5 ] | 43 47 118 und ein Zeichen aus: [ 56 / 57 / 43 / 47 ] | +/v und ein Zeichen aus: [ 8 / 9 / + / / ] |
| UTF-1 | F7 64 4C | 247 100 76 | ÷dL |
| UTF-EBCDIC | DD 73 66 73 | 221 115 102 115 | Ýsfs |
| SCSU | 0E FE FF (von anderen möglichen Bytefolgen wird abgeraten) [ 6 ] | 14 254 255 | ␎þÿ |
| BOCU-1 | FB EE 28 optional gefolgt von FF [ 7 ] | 251 238 40 optional gefolgt von 255 | ûî( optional gefolgt von ÿ |
| GB 18030 | 84 31 95 33 | 132 49 149 51 | „1•3 |
Siehe auch
Weblinks
• The Unicode Standard, chapter 2.6 Encoding Schemes. (PDF; 1,1 MB) unicode.org (englisch).
• The Unicode Standard, chapter 2.13 Special Characters and Noncharacters, section Byte Order Mark (BOM). (PDF; 1,1 MB) unicode.org (englisch).
• The Unicode Standard, chapter 16.8 Specials, section Byte Order Mark (BOM): U+FEFF. (PDF; 415 kB) unicode.org (englisch).
• Unicode FAQ: UTF-8, UTF-16, UTF-32 & BOM. unicode.org (englisch).
Einzelnachweise
cite-note-11. ↑ Bug Database. Abgerufen am 22. Februar 2024.
cite-note-22. ↑ 33415 – Can’t compile .cpp file with UTF-8 BOM. Abgerufen am 21. März 2022.
cite-note-33. ↑ PHP :: Request #22108 :: php doesn’t ignore the utf-8 BOM. Abgerufen am 21. März 2022.
cite-note-41. RFC: 3629 – UTF-8, a transformation format of ISO 10646. November 2003, Abschnitt 6: Byte order mark (BOM). – Standard: [STD 63] (englisch).
cite-note-52. Nur die höchstwertigen 6 Bits des vierten Byte. Die untersten beiden Bits sind von dem nachfolgenden Zeichen bestimmt
cite-note-63. UTS #6: Compression Scheme for Unicode. Abgerufen am 21. März 2022.
cite-note-74. UTN #6: BOCU-1. Abgerufen am 21. März 2022.